linux 字体如何配置

·

主要的配置文件

  • 系统级
    • /etc/fonts/fonts.conf
    • 主配置文件(通常不建议直接修改)
    • /etc/fonts/conf.d/
    • 符号链接到 /usr/share/fontconfig/conf.avail/ 中的配置片段
    • /usr/share/fontconfig/conf.avail/
    • 可用的配置片段(如 10-hinting.conf)
  • 用户级配置(推荐)
    • ~/.config/fontconfig/fonts.conf
      • 用户自定义字体配置(最常用)
    • ~/.fonts.conf
      • 旧式用户配置(已废弃,但仍支持)

字体文件

  • 系统级字体
    • /usr/share/fonts/
    • 需 root 权限操作
  • 用户级字体
    • ~/.fonts/ 或 ~/.local/share/fonts/
    • 无需特权,仅影响当前用户
  • 自定义目录
    • 如 /opt/fonts/
    • 需在 fonts.conf 中添加 dir 标签

安装字体

# 系统级安装(需 root)
sudo cp newfont.ttf /usr/share/fonts/truetype/
sudo fc-cache -fv  # 刷新缓存
# 用户级安装
cp newfont.ttf ~/.local/share/fonts/
fc-cache -fv  # 刷新用户缓存

调试工具

fc-list :lang=zh  
# 测试字体匹配逻辑11
fc-match "Microsoft YaHei" 

‌渲染控制‌

修改 /etc/fonts/conf.d/10-antialias.conf 启用抗锯齿:

<match target="font">
  <edit name="antialias" mode="assign"><bool>true</bool></edit>
</match>

优先显示策略‌

在 fonts.conf 中强制指定中文字体族:

<alias>
  <family>serif</family>
  <prefer>
    <family>Source Han Serif SC</family> <!-- 思源宋体 -->
  </prefer>
</alias>

‌缺失解决方案‌

  • Windows 字体迁移:复制 C:\Windows\Fonts 下的 *.ttf 到 Linux 字体目录
  • 安装开源字体包:
sudo apt install fonts-noto-cjk  # Ubuntu/Debian

缓存与生效

‌刷新缓存‌:任何字体增删后必须执行 fc-cache -fv ‌应用生效‌:部分应用需重启才能加载新配置(如终端、浏览器)

安装字体

# 创建用户字体目录
mkdir -p ~/.local/share/fonts
# 复制字体文件(.ttf, .otf, .woff 等)
cp ~/Downloads/JetBrainsMono-Regular.ttf ~/.local/share/fonts/
# 刷新字体缓存
fc-cache -fv

查看已安装字体

# 列出所有字体族名
fc-list : family
# 搜索特定字体
fc-list : family | grep -i "jetbrains\|fira\|mono"
# 查看某个字体的详细信息
fc-query ~/.local/share/fonts/JetBrainsMono-Regular.ttf | grep -A 2 -B 2 family

测试字体匹配

# 查看 monospace 别名指向哪个字体
fc-match monospace
# 查看 sans-serif 指向哪个字体
fc-match "sans-serif"
# 查看你设置的字体是否能匹配
fc-match "JetBrains Mono"

配置字体别名(例如:让 monospace 使用 JetBrains Mono)

编辑用户配置文件:

mkdir -p ~/.config/fontconfig
nano ~/.config/fontconfig/fonts.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <!-- 设置 monospace 默认为 JetBrains Mono -->
  <alias>
    <family>monospace</family>
    <prefer>
      <family>JetBrains Mono</family>
      <family>DejaVu Sans Mono</family>
      <family>Liberation Mono</family>
    </prefer>
  </alias>

  <!-- 可选:设置 sans-serif -->
  <alias>
    <family>sans-serif</family>
    <prefer>
      <family>Inter</family>
      <family>Roboto</family>
    </prefer>
  </alias>
</fontconfig>
# 保存后刷新缓存:
fc-cache -fv
# 验证
fc-match monospace
# 你应该看到输出指向 JetBrains Mono

配置字体渲染效果(可选)

你可以在 fonts.conf 中添加渲染优化:

<match target="font">
  <edit name="antialias" mode="assign"><bool>true</bool></edit>
  <edit name="hinting" mode="assign"><bool>true</bool></edit>
  <edit name="hintstyle" mode="assign"><const>hintslight</const></edit>
  <edit name="rgba" mode="assign"><const>rgb</const></edit>
  <edit name="lcdfilter" mode="assign"><const>lcddefault</const></edit>
  <edit name="autohint" mode="assign"><bool>false</bool></edit>
</match>

解释:

  • antialias: 启用抗锯齿
  • hinting: 字体微调(可选 hintnone, hintslight, hintmedium, hintfull)
  • rgba: 子像素渲染方向(LCD 屏幕适用)
  • lcdfilter: 平滑子像素边缘

💡 建议:笔记本/高分屏用 hintslight + lcddefault,台式机 RGB 屏可用 rgb

配置kitty字体: 具体应用场景

sudo apt install fonts-jetbrains-mono
cat <<EOF >> ~/.config/kitty/kitty.conf
font_family JetBrains Mono
font_size 14.0
EOF
# 验证
fc-match "JetBrains Mono"

让所有应用优先使用 Fira Code

sudo apt install fonts-firacode
<!-- ~/.config/fontconfig/fonts.conf -->
<alias>
  <family>monospace</family>
  <prefer>
    <family>Fira Code</family>
  </prefer>
</alias>

然后 fc-cache -fv,重启 Kitty 或其他应用

修复中文乱码或英文模糊

有时英文用等宽字体,中文却没字体可显示。可以添加中文字体 fallback:

<alias>
  <family>serif</family>
  <prefer>
    <family>Noto Serif CJK SC</family>
  </prefer>
</alias>
<alias>
  <family>sans-serif</family>
  <prefer>
    <family>Noto Sans CJK SC</family>
  </prefer>
</alias>
<alias>
  <family>monospace</family>
  <prefer>
    <family>JetBrains Mono</family>
    <family>Noto Sans Mono CJK SC</family>
  </prefer>
</alias>

安装中文字体(如 Noto CJK):

sudo apt install fonts-noto-cjk

调试技巧

  • 查看字体缓存状态 fc-cache -s
  • 检查某个字体是否被扫描 fc-list
  • 查看配置加载顺序 fc-match -v monospace (看输出中的 pattern)
  • 强制重建所有缓存 fc-cache -fv ~/.local/share/fonts/

最佳实践

  • 安装字体
    • 放入 ~/.local/share/fonts/
  • 配置字体
    • 使用 ~/.config/fontconfig/fonts.conf
  • 修改默认等宽字体
    • 在 fonts.conf 中设置 monospace 别名
  • 刷新配置
    • fc-cache -fv
  • 验证结果
    • fc-match monospace

完整示例配置文件

<!-- ~/.config/fontconfig/fonts.conf -->
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>

  <!-- 设置 monospace 默认字体 -->
  <alias>
    <family>monospace</family>
    <prefer>
      <family>JetBrains Mono</family>
      <family>Fira Code</family>
      <family>DejaVu Sans Mono</family>
    </prefer>
  </alias>

  <!-- 渲染优化 -->
  <match target="font">
    <edit name="antialias" mode="assign"><bool>true</bool></edit>
    <edit name="hinting" mode="assign"><bool>true</bool></edit>
    <edit name="hintstyle" mode="assign"><const>hintslight</const></edit>
    <edit name="rgba" mode="assign"><const>rgb</const></edit>
    <edit name="lcdfilter" mode="assign"><const>lcddefault</const></edit>
  </match>

</fontconfig>